import { getMeta } from '../config/config.js'
import { uploadImageToOss } from './uploadFile.js'
import html2canvas from 'html2canvas'
//是否是微信浏览器
function is_wechat_browser() {
	return /micromessenger/.test(navigator.userAgent.toLowerCase())
}
//是否是安卓系统
function is_android() {
	return /android/i.test(navigator.userAgent.toLowerCase())
}
//是否是iOS系统
function is_ios() {
	return /iphone|ipad|ipod/i.test(navigator.userAgent.toLowerCase())
}
/**
 * 验证密码必须为数字和字母组合，并且是6~18位
 */
function checkPassword(value) {
	return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,18}$/.test(value)
}

/**
 * 封装的展示消息提示的方法
 * @param {string} title 提示内容
 * @param {number} duration 显示时间，默认1.5s
 * @param {Function} callback 消失回调
 */
function showToast(title = '操作成功', duration = 1500, callback) {
	uni.showToast({
		title,
		duration,
		icon: 'none',
	})
	if (callback) {
		setTimeout(() => {
			callback()
		}, duration)
	}
}

/**
 * 封装的加载中展示方法
 * @param {string} title 提示文字
 * @param {boolean} mask 是否不允许交互，默认允许
 */
function showLoading(title = '', mask = false) {
	uni.showLoading({
		title,
		mask
	})
}
/**
 * 隐藏加载提示
 */
function hideLoading() {
	uni.hideLoading()
}
/** 
 * 时间戳转化为年 月 日 时 分 秒 
 * number: 传入时间戳 
 * format：返回格式，支持自定义，但参数必须与formateArr里保持一致 
 */
function formatTime(timeStamp, format = 'Y-M-D h:m:s') {
	var formateArr = ['Y', 'M', 'D', 'h', 'm', 's'];
	var returnArr = [];
	var date = new Date(timeStamp * 1000);
	returnArr.push(date.getFullYear());
	returnArr.push(formatNumber(date.getMonth() + 1));
	returnArr.push(formatNumber(date.getDate()));
	returnArr.push(formatNumber(date.getHours()));
	returnArr.push(formatNumber(date.getMinutes()));
	returnArr.push(formatNumber(date.getSeconds()));
	for (var i in returnArr) {
		format = format.replace(formateArr[i], returnArr[i]);
	}
	return format;
}
/**
 * 数据转化
 * @param {*} n 数据转化
 */
function formatNumber(n) {
	n = n.toString()
	return n[1] ? n : '0' + n
}

/**
 * 获取当前月份的天数
 * @param {*} year 年
 * @param {*} month 月
 */
function getMonthDayCount(year, month) {
	let date = new Date(year, month, 0);
	return date.getDate();
}
/**
 * 获取当前月份的天数组
 * @param {*} count 月份总天数
 */
function getMonthDaysList(count) {
	var list = []
	for (let i = 1; i <= count; i++) {
		list.push(i)
	}
	return list
}
/* yyyymmdd时间格式化成yyyy-mm-dd */
function formatDate_hg(dateString) {
	return dateString.replace(/^(\d{4})(\d{2})(\d{2})$/, "$1-$2-$3")
}
/**
 * 去除字符串所有的空格
 * @param {string} value 原字符串
 */
function clearSpace(value) {
	return value.replace(/\s*/g, '')
}
/**
 * 去除字符串所有的空格和换行
 * @param {string} value 原字符串
 */
function clearSpaceAndEnter(value) {
	return value.replace(/[\s\n]/g, '')
}
/**
 * 选择图片
 */
function showSelectImage() {
	return new Promise((resolve, reject) => {
		uni.chooseImage({
			count: 1,
			sizeType: ['original', 'compressed'],
			success: function(res) {
				console.log('选择的图片path：', res)
				resolve(res.tempFilePaths[0])
			},
			fail(error) {
				reject(error)
			}
		});
	})
}

/**
 * 选择图片并上传到阿里oss
 */
async function uploadImage() {
	const image = await showSelectImage()
	const ossRes = await uni.$u.http.post('oss/ststoken', getMeta())
	const ossConfig = ossRes.result
	const res = await uploadImageToOss(image, 'images', ossConfig.bucket, ossConfig.region, ossConfig.stsToken, ossConfig.accesskeyId, ossConfig.accesskeySecret)
	return res
}
/**
 * 将视图组件转换成图片
 * @param {string} selector 选择器
 */
function getImageByNodes(selector) {
	return new Promise((resolve, reject) => {
		// 创建选择器查询对象
		const query = uni.createSelectorQuery()
		query.select(selector).boundingClientRect(res => {
			const scale = window.devicePixelRatio < 3 ? window.devicePixelRatio : 2
			const canvasWidth = res.width
			const canvasHeight = res.height
			uni.$tools.showLoading('正在绘制')
			html2canvas(document.querySelector(selector), {
				useCORS: true, // 【重要】开启跨域配置
				scale: scale,
				allowTaint: true, // 允许跨域图片
				dpi: 300, //解决图片模糊
			}).then((canvas) => {
				uni.$tools.hideLoading()
				const imgData = canvas.toDataURL('image/jpeg', 1.0)
				const data = {
					imgData
				}
				resolve(data)
			}).catch(() => {
				uni.$tools.hideLoading()
				uni.$tools.showToast('无法获取到视图信息')
				reject('无法获取视图信息')
			})

		}).exec()
	})
}
/**
 * 格式化银行卡号中间显示8个*号
 * @param { string } code 银行卡号
 * @return {string} 返回格式化后的字符串
 */
function formatBankCardNo(code) {
	if (uni.$u.test.isEmpty(code)) {
		return code
	} else if (code.length < 8) {
		return code
	}
	const startCode = code.slice(0, 4)
	const endCode = code.slice(-4)
	return `${startCode} **** **** ${endCode}`
}
/**
 * 格式化身份证号中间显示*号
 * @param { string } idCard 身份证号
 * @return {string} 返回格式化后的字符串
 */
function formatIdCard(idCard) {
	if (uni.$u.test.isEmpty(idCard)) {
		return idCard
	} else if (idCard.length < 10) {
		return idCard
	}
	const startCode = idCard.slice(0, 6)
	const endCode = idCard.slice(-4)
	return `${startCode}********${endCode}`
}
/**
 * 格式化“年月日”日期字符串为“xxxx-xx-xx格式”
 * @param {string} date 需要格式化的日期
 */
function format_ymd(date) {
	let time = date
	time = time.replace(/([年月])/g, '-');
	time = time.replace(/日/g, '');
	return time
}
/**
 * 复制
 * @param {string} data 复制的内容
 */
function copy(data) {
	if(uni.$u.test.isEmpty(data)){
		return
	}
	uni.setClipboardData({
		data,
		success() {
			uni.$tools.showToast('复制成功')
		}
	})
}
export default {
	is_wechat_browser,
	is_android,
	is_ios,
	showToast,
	showLoading,
	formatTime,
	getMonthDayCount,
	getMonthDaysList,
	hideLoading,
	checkPassword,
	showSelectImage,
	uploadImage,
	formatDate_hg,
	clearSpace,
	clearSpaceAndEnter,
	getImageByNodes,
	formatBankCardNo,
	format_ymd,
	copy,
	formatIdCard
}